All files / app/pages [...slug].tsx

0% Statements 0/19
0% Branches 0/2
0% Functions 0/5
0% Lines 0/16

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45                                                                                         
import { appGetLayout } from "components/AppRoute";
import MarkdownPage, { MarkdownPageProps } from "features/markdown/MarkdownPage";
import { appServerSideTranslations } from "i18n/appServerSideTranslations";
import { DEFAULT_LOCALE } from "i18n/locales";
import { AUTH, GLOBAL, NOTIFICATIONS } from "i18n/namespaces";
import { GetStaticPaths, GetStaticProps } from "next";
 
async function getMarkdownPageBySlug(slug: Array<string>): Promise<MarkdownPageProps> {
  const md = await import(`markdown/${slug.join("/")}.md`);
  return { slug, frontmatter: md.attributes, content: md.html };
}
 
export const getStaticPaths: GetStaticPaths = () => {
  // Return empty paths for fast builds
  // Pages will be generated on-demand with fallback: 'blocking'
  return {
    paths: [],
    fallback: "blocking",
  };
};
 
export const getStaticProps: GetStaticProps = async ({ locale, params }) => {
  const slug = params!.slug as Array<string>;
 
  try {
    return {
      props: {
        ...(await appServerSideTranslations(locale ?? DEFAULT_LOCALE, [GLOBAL, AUTH, NOTIFICATIONS])),
        page: await getMarkdownPageBySlug(slug),
      },
    };
  } catch {
    // Markdown file doesn't exist or path is invalid
    return { notFound: true };
  }
};
 
export default function Markdown({ page }: { page: MarkdownPageProps }) {
  return <MarkdownPage {...page} />;
}
 
Markdown.getLayout = appGetLayout({
  isPrivate: false,
});